home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / SearchCD.rexx < prev    next >
OS/2 REXX Batch file  |  1998-08-19  |  7KB  |  202 lines

  1. /* Search CD */
  2.  
  3. VerStr = '$VER: SearchCD 1.0 (12.12.98)'
  4. VerStr = subword(VerStr,2)||'0a'x||'(c) Neil Bothwick, Wirenet'
  5.  
  6. /* ;;; Initialise */
  7. options results
  8. address command
  9. OutFile = 'RAM:SearchCD_results'
  10. if exists('ENVARC:CUCD/CUCDIndex') then CUCDPath = AddPart(GetVar('CUCD/CUCDIndex'),'')
  11. else CUCDPath = 'CDSupport/indices/'
  12. if exists('ENVARC:CUCD/AminetIndex') then AminetPath = AddPart(GetVar('CUCD/AminetIndex'),'')
  13. else AminetPath = 'CUCD/CDROM/AminetCDs/'
  14. GuiPort = 'SEARCHCD'
  15. PrgPort = 'SEARCHCD.1'
  16. GuiFile = 'SearchCD.mrx'
  17. MUIA_List_Quiet                   = 0x8042d8c7
  18. MUIM_List_Select                  = 0x804252d8
  19. MUIV_List_Select_All              = -2
  20. MUIV_List_Select_On               = 1
  21. MUIV_List_Select_Ask              = 3
  22. MUIA_List_First                   = 0x804238d4
  23. MUIM_List_Remove                  = 0x8042647e
  24. MUIV_List_Remove_Selected         = -3
  25. MUIA_Listview_MultiSelect         = 0x80427e08
  26. MUIV_Listview_MultiSelect_Default = 1
  27. MUIA_Gauge_Current                = 0x8042f0dd
  28. MUIA_Gauge_Divide                 = 0x8042d8df
  29. MUIA_Gauge_Horiz                  = 0x804232dd
  30. MUIA_Gauge_InfoText               = 0x8042bf15
  31. MUIA_Gauge_Max                    = 0x8042bcdb
  32. MUIA_List_Entries                 = 0x80421654
  33. MUIA_List_Quiet                   = 0x8042d8c7
  34. MUIA_Application_Active           = 0x804260ab
  35. MUIA_Application_Author           = 0x80424842
  36. MUIA_Application_Copyright        = 0x8042ef4d
  37. MUIA_Application_Description      = 0x80421fc6
  38. MUIA_Application_HelpFile         = 0x804293f4
  39. MUIA_Application_Iconified        = 0x8042a07f
  40. MUIA_Application_Title            = 0x804281b8
  41. MUIA_Application_Version          = 0x8042b33f
  42. MUIA_Application_Sleep            = 0x80425711
  43. MUIM_Application_AboutMUI         = 0x8042d21d
  44. TRUE = 1
  45. FALSE = 0
  46. ;;;
  47. /* ;;; Open arexx port and GUI */
  48. thisport = openport(PrgPort)
  49. if thisport = 0 then exit
  50. if ~show('P',GuiPort) then 'run >NIL: muirexx' GuiFile 'port' GuiPort
  51. 'waitforport' GuiPort
  52. do until cmd = 'READY'
  53.     call waitpkt(PrgPort)
  54.     packet = getpkt(PrgPort)
  55.     cmd = getarg(packet)
  56.     call reply(packet,0)
  57.     end
  58. address(GuiPort)
  59. call LoadList()
  60. 'application' MUIA_Application_Version '$VER: SearchCD 1.0 (12.12.98)'
  61. 'application' MUIA_Application_Author 'Neil Bothwick'
  62. 'application' MUIA_Application_Copyright '© 1998 by Neil Bothwick, Wirenet'
  63. 'application' MUIA_Application_Title 'SearchCD'
  64. 'application' MUIA_Application_Description 'Search CUCD and Aminet index files'
  65. ;;;
  66. /* ;;; Load libraries */
  67. call LoadLib('rexxsupport.library')
  68. call LoadLib('rexxdossupport.library')
  69. call LoadLib('rexxreqtools.library')
  70. ;;;
  71. /* ;;; Main loop */
  72. do forever
  73.     call waitpkt(PrgPort)
  74.     packet = getpkt(PrgPort)
  75.     if packet = '0000 0000'x then iterate
  76.     cmd = getarg(packet)
  77.     call reply(packet,0)
  78.     select
  79.     ;;;
  80. ;;;     /* Search */
  81.         when cmd = 'SEARCH' then do
  82.             'list id CDLST attrs' MUIA_List_Quiet TRUE
  83.             'application' MUIA_Application_Sleep TRUE
  84.             /* Get search string */
  85.             'string id SCSTR'
  86.             SearchStr = result
  87.             /* Get list of CDs to search */
  88.             drop CDs.
  89.             i = 0
  90.             do forever
  91.                  list id CDLST
  92.                  if result = '' then break
  93.                  i = i + 1
  94.                  CDs.i = result
  95.                  end
  96.             CDs.0 = i
  97.             select
  98.                 when SearchStr = '' then call ReqMsg('You must specify a string to search for')
  99.                 when CDs.0 = 0 then call ReqMsg('You must select at least one CD to search')
  100.                 otherwise call Search()
  101.                 end
  102.             'application' MUIA_Application_Sleep FALSE
  103.             'list id CDLST attrs' MUIA_List_Quiet FALSE
  104.             end
  105. ;;;
  106. ;;;     /* Select All */
  107.         when cmd = 'ALL' then do
  108.             'method id CDLST' MUIM_List_Select MUIV_List_Select_All MUIV_List_Select_On
  109.             end
  110. ;;;
  111. ;;;     /* Rescan */
  112.         when cmd = 'RESCAN' then call LoadList()
  113. ;;;
  114. ;;;     /* About */
  115.         when cmd = 'ABOUT' then call ReqMsg(VerStr||'0a'x||'Programmed using MUIrexx')
  116.         when cmd = 'ABOUTMUI' then 'method ' MUIM_Application_AboutMUI 0
  117. ;;;
  118. ;;;     /* Cancel */
  119.         otherwise call CleanUp()
  120.         end
  121.     end
  122. ;;;
  123. /* ;;; Subroutines */
  124. ;;;
  125. /* ;;; Load a library */
  126. LoadLib:
  127.     parse arg library
  128.     if ~show('L',library) then do
  129.         if ~addlib(library,0,-30,0) then call ExitMsg('Failed to load' library||'0a'x||'Make sure you have run InitCD')
  130.         end
  131.     return
  132. ;;;
  133. /* ;;; Show a message in a requester */
  134. ReqMsg:
  135.     parse arg msg
  136.     oldaddr = address()
  137.     address(GuiPort)
  138.     'request id MAIN title "CUCD Search" gadgets "OK" string' msg
  139.     choice = result
  140.     address(oldaddr)
  141.     return choice
  142. ;;;
  143. /* ;;; Exit with a requester */
  144. ExitMsg:
  145.     parse arg msg
  146.     call ReqMsg(msg)
  147.     call Cleanup()
  148.     return
  149. ;;;
  150. /* ;;; Cleanup and exit */
  151. CleanUp:
  152.     address command 'delete >NIL:' OutFile'#?'
  153.     address(GuiPort)
  154.     'QUIT'
  155.     exit
  156. ;;;
  157. /* ;;; Search CDs */
  158. Search:
  159.     address command 'delete >NIL:' OutFile
  160.     'gauge id PROGR attrs' MUIA_Gauge_Max CDs.0 MUIA_Gauge_InfoText '%ld/'CDs.0
  161.     do i = 1 to CDs.0
  162.         'gauge id PROGR attrs' MUIA_Gauge_Current i
  163.         if length(CDs.i) = 5 then Infile = IndexPath'CUCD0'substr(CDs.i,5,1)
  164.         else Infile = IndexPath||CDs.i
  165.         if IndexPath = AminetPath then address command 'echo "*NAminet'substr(InFile,length(Infile) - 1)'" >>'OutFile
  166.         address command 'FlashFind >>'OutFile InFile '"'SearchStr'" NOPREFS QUIET'
  167.         end
  168. /* Show matches or warn if none */
  169. if word(statef(OutFile),2) = 0 then call ReqMsg('No matches found for "'SearchStr'"')
  170. else address command 'Multiview' OutFile
  171. 'gauge id PROGR attrs' MUIA_Gauge_Current 0 MUIA_Gauge_InfoText '""'
  172. return
  173. ;;;
  174. /* ;;; List CDs for searching */
  175. LoadList:
  176.     address(GuiPort)
  177.     'list id CDLST attrs' MUIA_List_Quiet TRUE
  178.     'application' MUIA_Application_Sleep TRUE
  179.     /* Clear list */
  180.     'method id CDLST' MUIM_List_Select MUIV_List_Select_All MUIV_List_Select_On
  181.     'method id CDLST' MUIM_List_Remove MUIV_List_Remove_Selected
  182.     /* Check which set of CDs to search */
  183.     'cycle id CDTYP'
  184.     if result = 'CU Amiga' then IndexPath = CUCDPath
  185.     else IndexPath = AminetPath
  186.     /* Load list */
  187.     address command 'list' IndexPath 'pat (Index|CUCD)?? lformat "%N" to' OutFile
  188.     address command 'sort' OutFile OutFile'1'
  189.     if ~open(listfile,OutFile'1','R') then call ExitMsg('Error reading file')
  190.     do while ~eof(listfile)
  191.         line = readln(listfile)
  192.         if line > '' then 'list id CDLST insert string' line
  193.         end
  194.     call close(listfile)
  195.     'application' MUIA_Application_Sleep FALSE
  196.     'list id CDLST attrs' MUIA_List_Quiet FALSE
  197.     return
  198. ;;;
  199.  
  200.  
  201.  
  202.